/**
 * 
 */
package com.win.app;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.li.token.AccessToken;
import com.li.utils.WeixinUtil;
import com.li.utils.WxConfigure;
import com.tencent.common.Util;

/**
 * 监听器,默认启动时自动启动.
 * 该监听器做了如下事情
 * 1 配置公众号必须使用的所有的参数.
 * 2 定时获取Access_token,一天144次,然后加入到application作用域,在其他地方都可以使用到
 * 
 * @author liandyao
 * @date 2016-12-23
 * @version 1.0
 */
public class WexinAppListener implements ServletContextListener{
  
	/**
	 * 获取Access_token,因为每隔7200秒会失效
	 * 获取jsapi_ticket,因为每隔7200秒会失效
	 * @author liandyao
	 * @date 2016-12-23
	 * @version 1.0
	 */
	class GetAccess_tokenThread extends Thread{ 
		@Override
		public void run() {
			while(true){
				AccessToken at = WeixinUtil.getAccessToken(WeixinManager.appid, WeixinManager.appsecret);
				WxConfigure.setAccess_token(at.getToken());
				WxConfigure.setJsapi_ticket(WeixinUtil.getJsapi_ticket_url(at.getToken()));
				Util.log("生成access_token:"+at.getToken()+"  得到jsapi_ticket:"+WxConfigure.getJsapi_ticket());
				
				try {
					Thread.sleep(1000*600*6); //一个小时调用一次
				} catch (InterruptedException e) { 
					e.printStackTrace();
				}
			}
		}
	}

 
	
	public static void main(String[] args) {
		System.out.println(System.getProperty("user.dir")+"\\config" );
	}

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		 
		  //需要执行的逻辑代码，当spring容器初始化完成后就会执行该方法。  
		System.out.println("进入监听器!");
		WxConfigure.setAppID(WeixinManager.appid);
		//WxConfigure.setMchID("1415368202");//商户号
		//WxConfigure.setKey("KINDNNJLB18Z2J79XACV01LBS3HWY4YD");//商户号里面拿到的key
		WxConfigure.setAppSecret(WeixinManager.appsecret);
		//WxConfigure.setDomain("http://lifenyao.vicp.net");
		WxConfigure.setDomain(WeixinManager.domain);
		//WxConfigure.setPay_url(WxConfigure.getDomain()+"/wexin/pages/payBuy.jsp");//支付页面
		//WxConfigure.setNotify_url(WxConfigure.getDomain()+"/wexin/pay/notify.do");//支付成功后的回调地址
		WxConfigure.setCertLocalPath("config//apiclient_cert.p12");//本地证书地址
		//WxConfigure.setCertPassword("1415368202");//证书密码默认取商户号
		new GetAccess_tokenThread().start();//开启线程
		 
	}

}
